$(function() {
  //计算元素集合的总宽度
  function calSumWidth(elements) {
    var width = 0;
    $(elements).each(function() {
      width += $(this).outerWidth(true);
    });
    return width;
  }

  //滚动到指定选项卡
  function scrollToTab(element) {
    var marginLeftVal = calSumWidth($(element).prevAll()), marginRightVal = calSumWidth($(element).nextAll());
    // 可视区域非tab宽度
    var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".J_menuTabs"));
    //可视区域tab宽度
    var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
    //实际滚动宽度
    var scrollVal = 0;
    if($(".page-tabs-content").outerWidth() < visibleWidth) {
      scrollVal = 0;
    } else if(marginRightVal <= (visibleWidth - $(element).outerWidth(true) - $(element).next().outerWidth(true))) {
      if((visibleWidth - $(element).next().outerWidth(true)) > marginRightVal) {
        scrollVal = marginLeftVal;
        var tabElement = element;
        while((scrollVal - $(tabElement).outerWidth()) > ($(".page-tabs-content").outerWidth() - visibleWidth)) {
          scrollVal -= $(tabElement).prev().outerWidth();
          tabElement = $(tabElement).prev();
        }
      }
    } else if(marginLeftVal > (visibleWidth - $(element).outerWidth(true) - $(element).prev().outerWidth(true))) {
      scrollVal = marginLeftVal - $(element).prev().outerWidth(true);
    }
    $('.page-tabs-content').animate({
      marginLeft: 0 - scrollVal + 'px'
    }, "fast");
  }

  //查看左侧隐藏的选项卡
  function scrollTabLeft() {
    var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')));
    // 可视区域非tab宽度
    var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".J_menuTabs"));
    //可视区域tab宽度
    var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
    //实际滚动宽度
    var scrollVal = 0;
    if($(".page-tabs-content").width() < visibleWidth) {
      return false;
    } else {
      var tabElement = $(".J_menuTab:first");
      var offsetVal = 0;
      while((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) {//找到离当前tab最近的元素
        offsetVal += $(tabElement).outerWidth(true);
        tabElement = $(tabElement).next();
      }
      offsetVal = 0;
      if(calSumWidth($(tabElement).prevAll()) > visibleWidth) {
        while((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) {
          offsetVal += $(tabElement).outerWidth(true);
          tabElement = $(tabElement).prev();
        }
        scrollVal = calSumWidth($(tabElement).prevAll());
      }
    }
    $('.page-tabs-content').animate({
      marginLeft: 0 - scrollVal + 'px'
    }, "fast");
  }

  //查看右侧隐藏的选项卡
  function scrollTabRight() {
    var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')));
    // 可视区域非tab宽度
    var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".J_menuTabs"));
    //可视区域tab宽度
    var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
    //实际滚动宽度
    var scrollVal = 0;
    if($(".page-tabs-content").width() < visibleWidth) {
      return false;
    } else {
      var tabElement = $(".J_menuTab:first");
      var offsetVal = 0;
      while((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) {//找到离当前tab最近的元素
        offsetVal += $(tabElement).outerWidth(true);
        tabElement = $(tabElement).next();
      }
      offsetVal = 0;
      while((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) {
        offsetVal += $(tabElement).outerWidth(true);
        tabElement = $(tabElement).next();
      }
      scrollVal = calSumWidth($(tabElement).prevAll());
      if(scrollVal > 0) {
        $('.page-tabs-content').animate({
          marginLeft: 0 - scrollVal + 'px'
        }, "fast");
      }
    }
  }

  //通过遍历给菜单项加上data-index属性
  $(".J_menuItem").each(function(index) {
    if(!$(this).attr('data-index')) {
      $(this).attr('data-index', index);
    }
  });

  /**
   * 判断指定的APP是否已经打开
   * @param url 应用程序路径
   * @returns {boolean}
   */
  window.isAppOpen = function(url) {
    var __flag = false,
      __$_s,
      __$_s_1;

    $('.J_menuTab').each(function() {
      __$_s = $(this);

      if(__$_s.data('id') == url) {
        /*if(!__$_s.hasClass('active')) {
          __$_s.addClass('active').siblings('.J_menuTab').removeClass('active');
          scrollToTab(this);
          // 显示tab对应的内容区
          $('.J_mainContent .J_iframe').each(function() {
            __$_s_1 = $(this);

            if(__$_s_1.data('id') == url) {
              __$_s_1.show().siblings('.J_iframe').hide();
              return false;
            }
          });
        }*/
        __flag = true;
        return false;
      }
    });

    return __flag;
  };

  /**
   * 打开指定url的app
   * @param url 应用程序路径
   */
  window.openApp = function(url, queryParams, reload) {
    var __$_menu_item = $(".J_menuItem").filter("[href='" + url + "']");

    if(__$_menu_item.length === 0) {
      return false;
    }

    var __data_index = __$_menu_item.data('index'),
      __menu_name = $.trim(__$_menu_item.text());

    if(!window.isAppOpen(url)) {

      var __str = '<a href="javascript:;" class="active J_menuTab" data-id="' + url +
                  '">' + __menu_name + ' <i class="fa fa-times-circle"></i></a>';

      $('.J_menuTab').removeClass('active');

      // 添加选项卡对应的iframe
      var __str_1 = '<iframe class="J_iframe" name="iframe' + __data_index + '" width="100%" height="100%" src="' + url +
                    (rapid.hasValue(queryParams) ? "?" + queryParams : "") +
                    '" frameborder="0" data-id="' + url + '" seamless></iframe>';
      $('.J_mainContent').find('iframe.J_iframe').hide().parents('.J_mainContent').append(__str_1);

      // 添加选项卡
      $('.J_menuTabs .page-tabs-content').append(__str);
      scrollToTab($('.J_menuTab.active'));
    } else {
      if(reload) {
        $(".J_iframe").filter("[src^='" + url + "']").attr("src", url + (rapid.hasValue(queryParams) ? "?" + queryParams : ""));
      }
    }
    __$_menu_item.click();

    return true;
  };

  function menuItem() {
    // 获取标识数据
    var dataUrl = $(this).attr('href'),
      dataIndex = $(this).data('index'),
      menuName = $.trim($(this).text()),
      flag = true;
    if(dataUrl == undefined || $.trim(dataUrl).length == 0) {
      return false;
    }

    // 选项卡菜单已存在
    $('.J_menuTab').each(function() {
      if($(this).data('id') == dataUrl) {
        if(!$(this).hasClass('active')) {
          $(this).addClass('active').siblings('.J_menuTab').removeClass('active');
          scrollToTab(this);
          // 显示tab对应的内容区
          $('.J_mainContent .J_iframe').each(function() {
            if($(this).data('id') == dataUrl) {
              $(this).show().siblings('.J_iframe').hide();
              return false;
            }
          });
        }

        /*if(!$(this).hasClass('active')) {
          $(this).addClass('active').siblings('.J_menuTab').removeClass('active');
          scrollToTab(this);
          // 显示tab对应的内容区
          $('.J_mainContent .J_iframe').each(function() {
            if($(this).data('id') == dataUrl) {
              // TODO 再次刷新
              $(this).attr("src", $(this).attr("src"));
              $(this).show().siblings('.J_iframe').hide();
              return false;
            }
          });
        } else {
          $('.J_mainContent .J_iframe').each(function() {
            if($(this).data('id') == dataUrl) {
              // TODO 再次刷新
              $(this).attr("src", $(this).attr("src"));
              return false;
            }
          });
        }*/
        flag = false;
        return false;
      }
    });

    // 选项卡菜单不存在
    if(flag) {
      var str = '<a href="javascript:;" class="active J_menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
      $('.J_menuTab').removeClass('active');

      var __path = dataUrl;
      if(__path.indexOf("?") != -1) {
        __path += "&title=" + menuName;
      } else {
        __path += "?title=" + menuName;
      }

      // 添加选项卡对应的iframe
      var str1 = '<iframe class="J_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + __path + '" frameborder="0" data-id="' + dataUrl + '" seamless></iframe>';
      $('.J_mainContent').find('iframe.J_iframe').hide().parents('.J_mainContent').append(str1);

      //显示loading提示
      //            var loading = layer.load();
      //
      //            $('.J_mainContent iframe:visible').load(function () {
      //                //iframe加载完成后隐藏loading提示
      //                layer.close(loading);
      //            });
      // 添加选项卡
      $('.J_menuTabs .page-tabs-content').append(str);
      scrollToTab($('.J_menuTab.active'));
    }
    return false;
  }

  $('.J_menuItem').on('click', menuItem);

  // 关闭选项卡菜单
  function closeTab() {
    var closeTabId = $(this).parents('.J_menuTab').data('id');
    var currentWidth = $(this).parents('.J_menuTab').width();

    // 当前元素处于活动状态
    if($(this).parents('.J_menuTab').hasClass('active')) {

      // 当前元素后面有同辈元素，使后面的一个元素处于活动状态
      if($(this).parents('.J_menuTab').next('.J_menuTab').size()) {

        var activeId = $(this).parents('.J_menuTab').next('.J_menuTab:eq(0)').data('id');
        $(this).parents('.J_menuTab').next('.J_menuTab:eq(0)').addClass('active');

        $('.J_mainContent .J_iframe').each(function() {
          if($(this).data('id') == activeId) {
            $(this).show().siblings('.J_iframe').hide();
            return false;
          }
        });

        var marginLeftVal = parseInt($('.page-tabs-content').css('margin-left'));
        if(marginLeftVal < 0) {
          $('.page-tabs-content').animate({
            marginLeft: (marginLeftVal + currentWidth) + 'px'
          }, "fast");
        }

        //  移除当前选项卡
        $(this).parents('.J_menuTab').remove();

        // 移除tab对应的内容区
        $('.J_mainContent .J_iframe').each(function() {
          if($(this).data('id') == closeTabId) {
            $(this).remove();
            return false;
          }
        });
      }

      // 当前元素后面没有同辈元素，使当前元素的上一个元素处于活动状态
      if($(this).parents('.J_menuTab').prev('.J_menuTab').size()) {
        var activeId = $(this).parents('.J_menuTab').prev('.J_menuTab:last').data('id');
        $(this).parents('.J_menuTab').prev('.J_menuTab:last').addClass('active');
        $('.J_mainContent .J_iframe').each(function() {
          if($(this).data('id') == activeId) {
            $(this).show().siblings('.J_iframe').hide();
            return false;
          }
        });

        //  移除当前选项卡
        $(this).parents('.J_menuTab').remove();

        // 移除tab对应的内容区
        $('.J_mainContent .J_iframe').each(function() {
          if($(this).data('id') == closeTabId) {
            $(this).remove();
            return false;
          }
        });
      }
    }
    // 当前元素不处于活动状态
    else {
      //  移除当前选项卡
      $(this).parents('.J_menuTab').remove();

      // 移除相应tab对应的内容区
      $('.J_mainContent .J_iframe').each(function() {
        if($(this).data('id') == closeTabId) {
          $(this).remove();
          return false;
        }
      });
      scrollToTab($('.J_menuTab.active'));
    }
    return false;
  }

  $('.J_menuTabs').on('click', '.J_menuTab i', closeTab);

  //关闭其他选项卡
  function closeOtherTabs() {
    $('.page-tabs-content').children("[data-id]").not(":first").not(".active").each(function() {
      $('.J_iframe[data-id="' + $(this).data('id') + '"]').remove();
      $(this).remove();
    });
    $('.page-tabs-content').css("margin-left", "0");
  }

  $('.J_tabCloseOther').on('click', closeOtherTabs);

  //滚动到已激活的选项卡
  function showActiveTab() {
    scrollToTab($('.J_menuTab.active'));
  }

  $('.J_tabShowActive').on('click', showActiveTab);


  // 点击选项卡菜单
  function activeTab() {
    if(!$(this).hasClass('active')) {
      var currentId = $(this).data('id');
      // 显示tab对应的内容区
      $('.J_mainContent .J_iframe').each(function() {
        if($(this).data('id') == currentId) {
          $(this).show().siblings('.J_iframe').hide();
          return false;
        }
      });
      $(this).addClass('active').siblings('.J_menuTab').removeClass('active');
      scrollToTab(this);
    }
  }

  $('.J_menuTabs').on('click', '.J_menuTab', activeTab);

  //刷新iframe
  function refreshTab() {
    var target = $('.J_iframe[data-id="' + $(this).data('id') + '"]');
    var url = target.attr('src');
    //        //显示loading提示
    //        var loading = layer.load();
    //        target.attr('src', url).load(function () {
    //            //关闭loading提示
    //            layer.close(loading);
    //        });
  }

  $('.J_menuTabs').on('dblclick', '.J_menuTab', refreshTab);

  // 左移按扭
  $('.J_tabLeft').on('click', scrollTabLeft);

  // 右移按扭
  $('.J_tabRight').on('click', scrollTabRight);

  // 关闭全部
  $('.J_tabCloseAll').on('click', function() {
    $('.page-tabs-content').children("[data-id]").not(":first").each(function() {
      $('.J_iframe[data-id="' + $(this).data('id') + '"]').remove();
      $(this).remove();
    });
    $('.page-tabs-content').children("[data-id]:first").each(function() {
      $('.J_iframe[data-id="' + $(this).data('id') + '"]').show();
      $(this).addClass("active");
    });
    $('.page-tabs-content').css("margin-left", "0");
  });

});
